home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Mail / MailEnclosure / Source.v0.15 / cvs.postamble < prev    next >
Text File  |  1995-06-12  |  10KB  |  261 lines

  1. # $Id: cvs.postamble,v 1.2 94/04/10 13:13:03 nwc Exp $
  2. #                               cvs.postamble
  3. # Art Isbell
  4. # isbell@cats.ucsc.edu
  5. #
  6. # NeXTSTEP 3.0's ProjectBuilder and InterfaceBuilder do not work well with CVS
  7. # (Concurrent Versions System).  Occasionally, InterfaceBuilder complains that
  8. # it cannot save certain directories (e.g., nib's and rtfd's) containing a CVS
  9. # administrative directory; saving a second time will force a successful save.
  10. # But a successful save causes these CVS directories to be lost resulting in
  11. # CVS complaining that it cannot check in these directories during a subsequent
  12. # CVS commit.  All CVS administrative directories are copied into the product
  13. # when the "app", "debug", or "profile" targets are made.  Although the
  14. # existence of these directories appears to cause no problems, it serves no
  15. # purpose and increases the product size.  cvs.postamble attempts to correct
  16. # these problems.
  17. #
  18. # In addition, once a CVS working directory has been created, all CVS commands
  19. # can be run from ProjectBuilder using the "cvs" target.
  20. #
  21. # One approach to using cvs.postamble is to install it in a well-known
  22. # directory (e.g., /LocalDeveloper/Makefiles) defined as LOCALMAKEDIR in
  23. # Makefile.preamble:
  24. #
  25. # LOCALMAKEDIR = /LocalDeveloper/Makefiles
  26. #
  27. # and include it in Makefile.postamble (separate "include" statements from
  28. # surrounding statements by at least one blank line):
  29. #
  30. # include $(LOCALMAKEDIR)/cvs.postamble
  31. #
  32. # Defined in cvs.postamble:
  33. #   CVSDIR - name of CVS administrative directories.
  34.  
  35. CVSDIR = CVS
  36.  
  37. #       Example:
  38. #           To use cvs.postamble with versions of CVS that use a administrative
  39. #           directory name different from "CVS" (e.g., "CVS.adm"), change the
  40. #           above statement to:
  41. #               CVSDIR = CVS.adm
  42. #   CVSARCHIVE - archive file in the CVS working directory in which all CVS
  43. #       administrative directories will be stored during project modification.
  44.  
  45. CVSARCHIVE = CVS.tar
  46.  
  47. #       Example:
  48. #           To change CVSARCHIVE to be "foo.tar", change the above statement
  49. #           to:
  50. #               CVSARCHIVE = foo.tar
  51. #   CVSROOT - full path to CVS repository root directory.  This will be used
  52. #       to set the CVSROOT environment variable from the Bourne (not C) shell
  53. #       in which the cvs command is executed, so any '$' must be escaped with
  54. #       another '$'.
  55.  
  56. CVSROOT = $$HOME/Development/CVS
  57.  
  58. #       Example:
  59. #           To change CVSROOT to /usr/cvsroot, change the above statement to:
  60. #               CVSROOT = /usr/cvsroot
  61. #   CVS - full path of the cvs executable.
  62.  
  63. CVS = /usr/local/bin/cvs
  64.  
  65. #
  66. # Inputs from "make" macro definition arguments (defaults set in
  67. # cvs.postamble):
  68. #   SEARCHDIRS - white space delimited list of one or more directories relative
  69. #       to the CVS working directory to which to limit the scope of the current
  70. #       target.  This minimizes the time to make the target after a CVS
  71. #       checkout or before a CVS commit of a specific subdirectory of a CVS
  72. #       working directory.  No directory in SEARCHDIRS should be a subdirectory
  73. #       of any other directory in SEARCHDIRS.  Bourne shell wildcard characters
  74. #       can be used.
  75.  
  76. SEARCHDIRS = .
  77.  
  78. #       Example:
  79. #           To make the ARCHIVE_CVS_DIRS target on an unlocalized nib, foo.nib,
  80. #           and a localized Help directory, German.lproj/Help, include a macro
  81. #           definition as a "make" argument, either from a shell command line:
  82. #               % make ckout SEARCHDIRS="foo.nib German.lproj/Help"
  83. #           or as an entry in the "Args" FormCell in ProjectBuilder's Builder
  84. #           View:
  85. #               ckout SEARCHDIRS="foo.nib German.lproj/Help"
  86. #   PRODUCTS - white space delimited list of one or more product directories
  87. #       from which all CVS directories are to be deleted.
  88.  
  89. PRODUCTS = debug app profile
  90.  
  91. #       Example:
  92. #           To remove CVS directories from foo.debug and foo.app, but not
  93. #           foo.profile, include a macro definition as a "make" argument,
  94. #           either from a shell command line:
  95. #               % make rm PRODUCTS="debug app"
  96. #           or as an entry in the "Args" FormCell in ProjectBuilder's Builder
  97. #           View:
  98. #               rm PRODUCTS="debug app"
  99. #
  100. # Targets: (Customize target names, if desired.)
  101.  
  102. ARCHIVE_CVS_DIRS = ckout cvs_dirs_out cvs_archive
  103.  
  104. #       Archives all CVS directories (excluding NAME.app, NAME.debug,
  105. #       NAME.profile, and backup directories (~)) rooted in SEARCHDIRS
  106. #       (default = .) into CVSARCHIVE.  THIS TARGET MUST BE MADE AFTER A CVS
  107. #       CHECKOUT AND BEFORE AN IB SAVE TO AVOID LOSS OF CVS DIRECTORIES!!
  108. #       Example:
  109. #           To copy French.lproj/foo.nib's CVS directory to CVSARCHIVE
  110. #           immediately after checking it out from the CVS repository, include
  111. #           a macro definition as a "make" argument, either from a shell
  112. #           command line:
  113. #               % make ckout SEARCHDIRS=French.lproj/foo.nib
  114. #           or as an entry in the "Args" FormCell in ProjectBuilder's Builder
  115. #           View:
  116. #               ckout SEARCHDIRS=French.lproj/foo.nib
  117.  
  118. RESTORE_CVS_DIRS = ckin cvs_dirs_in cvs_restore
  119.  
  120. #       Restores all CVS directories rooted in SEARCHDIRS (default = .) from
  121. #       CVSARCHIVE.  THIS TARGET MUST BE MADE AFTER THE LAST IB SAVE AND BEFORE
  122. #       CVS COMMIT TO AVOID AN UNSUCCESSFUL COMMIT!!
  123. #       Example:
  124. #           To prepare English.lproj/Help/Index.rtfd for a CVS commit after its
  125. #           modification in InterfaceBuilder, include a macro definition as a
  126. #           "make" argument, either from a shell command line:
  127. #               % make ckin SEARCHDIRS=English.lproj/Help/Index.rtfd
  128. #           or as an entry in the "Args" FormCell in ProjectBuilder's Builder
  129. #           View:
  130. #               ckin SEARCHDIRS=English.lproj/Help/Index.rtfd
  131.  
  132. REMOVE_CVS_DIRS = rm cvs_dirs_rm
  133.  
  134. #       Removes CVS directories from PRODUCTS in the CVS working directory.
  135. #       Making this target is not necessary and should be done only when
  136. #       desiring to rid an uninstalled product of its CVS directories.  See
  137. #       example in "PRODUCTS" above.
  138. #   cvs
  139. #       Runs any CVS command specified by the value of the ARGS variable.
  140. #       However, any command requiring user input in an editor (e.g., cvs
  141. #       checkin) should not be run because of lack of terminal support in
  142. #       ProjectBuilder Builder View's ScrollView.
  143. #       Example:
  144. #           To run "cvs -d $HOME/cvsroot checkout -r tag foomod/barfile":
  145. #               cvs ARGS="-d $HOME/cvsroot checkout -r tag foomod/barfile"
  146. #   help
  147. #       Adds help for CVS-specific targets.
  148. #   before_install
  149. #       Removes CVS directories before the app is installed as the "install"
  150. #       target is being made.  Should not be explicitly made.
  151. #
  152. # $Log:    cvs.postamble,v $
  153. # Revision 1.2  94/04/10  13:13:03  nwc
  154. # merging in work code.
  155. # Revision 1.1  1994/03/26  23:28:42  nwc
  156. # Added cvs stuff.
  157. #
  158. # Revision 1.1  1992/12/09  03:12:32  nwc
  159. # Helps cvs deal with NS3.0 nibs
  160. #
  161. # Revision 1.6  1992/10/15  18:52:23  art
  162. # Added "find" options to prevent cvs from searching through various app
  163. # wrappers when either archiving or restoring CVS directories.
  164. #
  165. # Revision 1.5  1992/09/01  04:43:56  art
  166. # Replaced tabs (except those at beginning of target rule lines) with 4
  167. # spaces and rewrapped lines so that file is more readable using Edit's
  168. # default 8-column tab width.
  169. #
  170. # Revision 1.4  1992/08/31  17:57:15  art
  171. # Made target names easy to change to local preferences.  Added cvs-specific
  172. # help.
  173. #
  174. # Revision 1.3  1992/08/27  20:32:15  art
  175. # Fixed bug that prevented the restoration of missing CVS directories in the
  176. # cvsci target.  Added code to skip backup directories when cvsci is being
  177. # made.
  178. #
  179. # Revision 1.2  1992/08/27  04:42:50  art
  180. # Changed archiving of CVS administration directories to a tar archive so
  181. # that CVS doesn't try to descend into archive directory during cvs update.
  182. # Added a target that permits the running of CVS commands from ProjectBuilder.
  183. #
  184. # Revision 1.1.1.1  1992/08/10  01:42:32  art
  185. # Initial release
  186. #
  187.  
  188. # Variables
  189. FIND = /usr/bin/find
  190. XARGS = /usr/bin/xargs
  191. SED = /bin/sed
  192. GNUTAR = /usr/bin/gnutar
  193.  
  194. # Targets
  195. $(ARCHIVE_CVS_DIRS):
  196.     @for searchdir in $(SEARCHDIRS) ; do \
  197.         for dir in `$(FIND) $$searchdir -type d \( \( -name '*~' -o \
  198.             -name "$(NAME).debug" -o -name "$(NAME).app" -o \
  199.             -name "$(NAME).profile" -o -name '*obj' \) -prune \) -o \
  200.             \( -name "$(CVSDIR)" -prune -print \) | \
  201.             $(SED) 's/^\.\/\(.*\)$$/\1/'` ; do \
  202.             $(ECHO) Checking $$dir ; \
  203.             $(GNUTAR) uf $(CVSARCHIVE) $$dir; \
  204.         done ; \
  205.     done
  206.  
  207. $(RESTORE_CVS_DIRS):
  208.     @if [ ! -f "$(CVSARCHIVE)" ] ; then \
  209.         $(ECHO) Cannot proceed without CVS archive ; \
  210.         exit ; \
  211.     fi ; \
  212.     for searchdir in $(SEARCHDIRS) ; do \
  213.         for dir in `$(FIND) $$searchdir -type d \( \
  214.             \( \( -name "$(CVSDIR)" -o -name '*~' -o \
  215.             -name "$(NAME).debug" -o -name "$(NAME).app" -o \
  216.             -name "$(NAME).profile" -o -name '*obj' \) -prune \) -o \
  217.             -print \) | $(SED) 's/^\.\/\(.*\)$$/\1/'` ; do \
  218.             $(ECHO) Checking $$dir ; \
  219.             if [ ! -d $$dir/$(CVSDIR) ] ; then \
  220.                 if [ $$dir = . ] ; then \
  221.                     tardir=$(CVSDIR) ; \
  222.                 else \
  223.                     tardir=$$dir/$(CVSDIR) ; \
  224.                 fi ; \
  225.                 $(GNUTAR) xf $(CVSARCHIVE) $$tardir >/dev/null 2>&1 ; \
  226.             fi ; \
  227.         done ; \
  228.     done
  229.  
  230. $(REMOVE_CVS_DIRS):
  231.     @for product in $(PRODUCTS) ; do \
  232.         product=$(NAME).$$product ; \
  233.         if [ -d "$$product" ] ; then \
  234.             $(ECHO) "Removing $(CVSDIR) directories from $$product" ; \
  235.             $(FIND) $$product -name "$(CVSDIR)" -prune -print | \
  236.                 $(XARGS) $(RM) -rf ; \
  237.         fi ; \
  238.     done
  239.  
  240. cvs:
  241.     @if [ -z "$(ARGS)" ] ; then \
  242.         $(ECHO) Usage: cvs ARGS=\"[cvs_options] cvs_command [command_options] [command_args]\" ; \
  243.     else \
  244.         CVSROOT=$(CVSROOT) $(CVS) $(ARGS) ; \
  245.     fi
  246.  
  247. before_install::
  248.     @set $(REMOVE_CVS_DIRS) ; \
  249.     $(MAKE) "PRODUCTS = app" $$1
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.